package org.example.curriculum_design_6_16.entity.vo;

import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Setter;
import org.example.curriculum_design_6_16.entity.pojo.User;

import java.sql.Date;
import java.util.List;

/**
 * 用户视图对象
 */
@Data
public class UserVo {
    /**
     * 用户ID
     */
    private String userId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 手机号
     */
    private String phone;

    /**
     * 真实姓名
     */
    private String realName;

    /**
     * 创建时间
     */
    @Setter
    private Date createdAt;

    /**
     * 最后登录时间
     */
    private Date lastLogin;

    /**
     * 账户状态 (0-未激活, 1-已激活)
     */
    private Integer isActive;

    /**
     * 用户角色 (可扩展)
     */
    private String role;

    /**
     * 用户权限列表 (可扩展)
     */
    private List<String> permissions;

    /**
     * JWT令牌
     */
    private String JWT;

    public void buildUserVo(User user, String role, String token) {
        this.setUserId(user.getUserId());
        this.setUsername(user.getUsername());
        this.setEmail(user.getEmail());
        this.setPhone(user.getPhone());
        this.setRealName(user.getRealName());

        // 安全处理日期转换
        this.setCreatedAt(convertDate(user.getCreatedAt()));
        this.setLastLogin(convertDate(user.getLastLogin()));

        this.setIsActive(user.getIsActive());
        this.setRole(role);
        this.setJWT(token);
    }

    // 安全的日期转换方法
    private Date convertDate(Object date) {
        if (date == null) {
            return null;
        }

        if (date instanceof java.sql.Date) {
            return new Date(((java.sql.Date) date).getTime());
        }

        if (date instanceof java.sql.Timestamp) {
            return new Date(((java.sql.Timestamp) date).getTime());
        }

        if (date instanceof java.util.Date) {
            return new Date(((java.util.Date) date).getTime()); // Handles java.util.Date
        }

        // Handle other cases, e.g., String or any other type, if needed
        throw new IllegalArgumentException("不支持的日期类型: " + date.getClass());
    }
}